package exception02;

/**
 * 第一种格式:
 *   try{
 *        //第一种情况:try中没有检测到异常,直接执行finally中的语句,然后程序继续向下执行
 *        //第二种情况:try中的检测发现异常,执行找对应的catch执行,catch处理完异常后,继续执行finally中代码
 *        //         finally中的语句执行完成之后,程序继续向下执行
 *   }catch(异常类型 变量名){
 *
 *   }...finally{
 *        //无论try中是否检测出异常,finally中的语句最终都会被执行
 *        //适用场景: 无论上面代码是否操作成功,都要释放资源 : IO流,数据连接关闭
 *   }
 * 第二种格式:
 *   try{
 *
 *   }finally{
 *          //无论try中是否检测出异常,finally中的语句最终都会被执行
 *
 *   }
 */
public class ExceptionDemo07 {
    public static void main(String[] args)throws Exception {
        //method01();
        try{
            //getTotalPrice(3, 20);
            getTotalPrice(-3, 20);
        }finally {
            System.out.println("finally被执行");
        }
        System.out.println("程序被正常执行");
    }

    private static void method01() {
        try{
            //getTotalPrice(3, 20);
            getTotalPrice(-3, 20);
        }catch (Exception e){
            System.out.println("捕获了Exception");
        }finally {
            System.out.println("finally被执行");
        }
        System.out.println("程序被正常执行");
    }

    public static int getTotalPrice(int price, int amount) throws Exception {
        if (price < 0) {
            throw new Exception("单价不能为负值:" + price);
        }
        return price * amount;
    }
}
